// 网络相关
// 与Internet相关的函数
#include <arpa/inet.h>
// 关于无符号整数类型的定义
#include <bits/stdint-uintn.h>
// 与网络有关的数据结构、变量等
#include <ifaddrs.h>
#include <netdb.h>
// 与Internet协议有关的定义
#include <netinet/in.h>
// 与IP协议有关的定义
#include <netinet/ip.h>
// 与ICMP协议有关的定义
#include <netinet/ip_icmp.h>
// socket的创建、操作
#include <sys/socket.h>

// I/O
#include <stdio.h>
#include <string.h>

// Calculation
#include <math.h>

// Memory
#include <malloc.h>
#include <memory.h>

// System
#include <assert.h>
// 对文件描述符的操作
#include <fcntl.h>
// Linux信号操作
#include <signal.h>
// 与整数有关的定义
#include <stdint.h>
// timeval等与时间相关的定义
#include <sys/time.h>
// UNIX通用函数等
#include <unistd.h>

void start_ping(const char *);
uint16_t internet_checksum(struct icmp *packet, uint32_t len);
int send_packet(int seq);
int recv_packet(int seq);
void unpack_packet(int seq);
